package pl.edu.pw.mini.java2.Communicator.Server;

import java.util.*;

/**
 * Klasa odpowiadająca za przechowywanie dodawanie, usuwanie
 * klientów.
 * @author Dymitr Załunin, Kamil Łysik 
 */
public class ClientsCollection {

	private HashMap<String, ClientHandler> clients = null;

	/**
	 * Tworzy nową instancję klasy.
	 */
	public ClientsCollection() {
		clients = new HashMap<String, ClientHandler>();
	}

	/**
	 * Dodaje nowego klienta.
	 * @param login Login nowego klienta.
	 * @param ch Obiekt klasy obsługujacej dodawanego klienta.
	 */
	public synchronized void AddClient(String login, ClientHandler ch) {
		clients.put(login, ch);
	}

	/**
	 * Usuwa klienta.
	 * @param login Login klienta.
	 */
	public synchronized void RemoveClient(String login) {
		clients.remove(login);
	}

	/**
	 *  
	 * @param login Login klienta.
	 * @return Referencja do obiektu klasy obsługującej klienta.
	 */
	public synchronized ClientHandler FindClientHandler(String login) {
		return clients.get(login);
	}
	
	/**
	 * @return Wszyscy podłączeni klienci.
	 */
	public Object[] GetAllClientsNames(){
		ArrayList<String> list=new ArrayList<String>();			
		for (String key: clients.keySet()){			
			list.add(key);
		}
		return list.toArray();
	}
	
	/**
	 * @return Liczba podłączonych klientów.
	 */
	public int Count(){
		return clients.size();
	}
}